/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦，本文采用木兰宽松许可证第2版]
 * 
 * https://zhiqim.org/project/zhiqim_kit/zhiqim_git.htm
 *
 * ZhiqimGit is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.git.objer;

import java.io.File;
import java.io.IOException;

import org.zhiqim.git.GitFileLock;

import org.zhiqim.kernel.util.Bytes;

/**
 * 包锁文件，创建${gitMetaDir}/objects/pack/pack-{oid}.keep锁文件，对GitFileLock进行封装
 * @see GitFileLock
 *
 * @version v1.0.0 @author zouzhigang 2017-4-28 新建与整理
 */
public class PackLock
{
    private final File keepFile;

    public PackLock(final File packFile)
    {
        File parent = packFile.getParentFile();
        String name = packFile.getName();
        this.keepFile = new File(parent, name.substring(0, name.length() - 5) + ".keep");
    }

    public boolean lock(String msg) throws IOException
    {
        if (msg == null)
            return false;
        
        if (!msg.endsWith("\n"))
            msg += "\n";
        
        GitFileLock lock = new GitFileLock(keepFile);
        if (!lock.lock())
            return false;
        
        lock.write(Bytes.BU.toBytes(msg));
        return lock.commit();
    }

    public void unlock()
    {
        keepFile.delete();
    }
}
